package com.vk.project.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.vk.project.model.vo.ChartVO;
import com.vk.vkapicommon.model.entity.UserInterfaceInfo;

import java.util.List;

/**
 * @ClassName : UserInterfaceInfoService
 * @Description : 用户接口信息服务接口
 * @Author : LYQ
 * @Date: 2023-11-23 22:07:58
 */
public interface UserInterfaceInfoService extends IService<UserInterfaceInfo> {

    /**
     * 调用接口时用户和接口信息相关操作
     *
     * @param userInterfaceInfo 用户和接口信息对象
     * @param add               是否添加
     */
    void validUserInterfaceInfo(UserInterfaceInfo userInterfaceInfo, boolean add);

    /**
     * 调用接口统计
     *
     * @param interfaceInfoId 接口Id
     * @param userId          用户Id
     * @return 返回是否计数成功
     */
    boolean invokeCount(long interfaceInfoId, long userId);

    /**
     * 根据接口Id获取与该接口相关的用户接口信息
     *
     * @param interfaceId 接口Id
     * @return 返回用户接口信息列表
     */
    List<UserInterfaceInfo> getUserInterfaceInfoListById(long interfaceId);

    /**
     * 根据接口Id删除与该接口相关的用户接口信息
     *
     * @param interfaceId 接口Id
     * @return 返回是否删除成功
     */
    boolean deleteInterfaceInfoByInterfacId(long interfaceId);

    /**
     * 根据用户Id删除与该用户相关的用户接口信息
     *
     * @param id 用户Id
     * @return 返回删除结果
     */
    boolean removeUserInterfaceInfoByUid(Long id);

    /**
     * 根据用户Id和接口Id获取剩余调用次数
     *
     * @param userId      用户Id
     * @param interfaceId 接口Id
     * @return 返回剩余次数
     */
    int getleftNumByUserIdAndInterfaceId(long userId, long interfaceId);

    /**
     * 给用户再增加50次接口调用次数
     *
     * @param userId      用户Id
     * @param interfaceId 接口Id
     * @return
     */
    boolean addBy50Times(long userId, long interfaceId);

    /**
     * 获取已发放次数
     * @return 返回已发放次数
     */
    int getIssuedTimes();

    /**
     * 获取累计调用
     * @return 返回累计调用
     */
    int getAccumulatedCalls();

    /**
     * 获取用户调用次数
     *
     * @return 返回数据
     */
    List<ChartVO> getNumberOfUserCalls();

    /**
     * 获取各个接口的调用次数
     *
     * @return 返回数据
     */
    List<ChartVO> getNumberOfInterfaceCalls();
}
